package com.fit2cloud.common.provider.impl.tencent;

import com.fit2cloud.common.platform.credential.Credential;
import com.fit2cloud.common.platform.credential.impl.OpenStackCredential;
import com.fit2cloud.common.platform.credential.impl.TencentCredential;
import com.fit2cloud.common.provider.AbstractBaseCloudProvider;
import com.fit2cloud.common.provider.entity.F2CBalance;
import com.fit2cloud.common.provider.impl.tencent.api.TencentBaseCloudApi;
import com.fit2cloud.common.provider.impl.tencent.api.TencentBaseMethodApi;
import com.fit2cloud.common.provider.impl.tencent.entity.request.GetAccountBalanceRequest;
import com.fit2cloud.common.provider.impl.tencent.entity.request.GetRegionsRequest;
import com.fit2cloud.common.utils.JsonUtil;
import org.pf4j.Extension;

import java.util.List;
import java.util.Map;

@Extension
public class TencentBaseCloudProvider extends AbstractBaseCloudProvider<TencentCredential> {
    private static final String logoSvg = "<svg width=\"160\" height=\"38\" viewBox=\"0 0 160 38\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n" +
            "<path d=\"M110.442 8.28577H97.4848V10.1429H101.416V17.0001H96.7568V18.8572H101.416V30.1429H103.599V18.8572H108.549V29.7143H112.48V27.8572H110.733V8.28577H110.442ZM103.454 16.7143V10.1429H108.549V17.0001H103.599V16.7143H103.454Z\" fill=\"#253554\"/>\n" +
            "<path d=\"M74.3359 24.8572H84.6726V26.7143H74.3359V24.8572Z\" fill=\"#253554\"/>\n" +
            "<path d=\"M67.2026 21.4286C67.2026 24.7143 67.057 27.4286 66.3291 29.5715C66.3291 29.7143 66.3291 29.7143 66.4747 29.7143C66.4747 29.7143 68.0761 29.7143 68.3673 29.7143C69.0952 26.5715 69.0952 24.0001 69.0952 22.1429H71.7158V27.8572H69.9688C69.8232 27.8572 69.8232 27.8572 69.8232 28.0001L70.4055 29.7143H73.754V8.28577H67.3482L67.2026 21.4286ZM69.2408 20.5715V16.2858H71.8614V20.8572H69.2408V20.5715ZM71.8614 10.1429V14.5715H69.2408V10.1429H71.8614Z\" fill=\"#253554\"/>\n" +
            "<path d=\"M85.4005 15.8572H87.8755V14.1429H80.4506C80.5962 13.5714 80.7417 12.8572 81.1785 12.4286H87.5843V10.7143H85.8373C85.9829 9.7143 86.5652 8.42859 86.5652 8.42859C86.5652 8.28573 86.5652 8.28573 86.4196 8.28573H84.8182L84.0902 10.7143H81.7608C81.9064 9.7143 82.052 8.57145 82.3432 7.57145C82.3432 7.42859 82.3432 7.42859 82.1976 7.42859C82.052 7.42859 80.8873 7.42859 80.4506 7.42859C80.305 8.7143 80.1594 9.85716 79.7226 10.8572H78.4124L77.6844 8.42859H76.083C75.9374 8.42859 75.9374 8.42859 75.9374 8.57145C75.9374 8.7143 76.2286 9.85716 76.6653 10.8572H74.9183V12.5714H78.9947C78.8491 13.1429 78.7035 13.8572 78.2668 14.2857H74.3359V16H77.3933C76.083 17.7143 74.9183 18.4286 74.3359 18.8572C74.3359 19 74.3359 20.7143 74.3359 20.7143C74.3359 20.8572 74.4815 20.8572 74.6271 20.7143C75.2095 20.5714 75.9374 20 76.3741 19.4286H83.5079V22H77.9756L78.1212 20.4286C78.1212 20.2857 78.1212 20.2857 77.9756 20.2857C77.83 20.2857 76.2286 20.2857 76.2286 20.2857L76.083 23.4286C76.083 23.5714 76.083 23.5714 76.2286 23.5714C76.3741 23.5714 85.8373 23.5714 85.8373 23.5714V28.1429H81.6153C81.4697 28.1429 81.4697 28.1429 81.4697 28.2857L82.052 30H88.1667V22H85.8373V18.5714C86.7108 19.2857 87.5843 20 88.4578 20.2857C88.6034 20.4286 88.749 20.4286 88.749 20.2857C88.749 20.2857 88.749 18.5714 88.749 18.4286C87.8755 18.1429 86.5652 17.4286 85.4005 15.8572ZM83.0711 15.8572C83.3623 16.5714 83.9446 17.2857 84.527 17.7143H78.2668C78.8491 17.1429 79.1403 16.4286 79.7226 15.8572H83.0711Z\" fill=\"#253554\"/>\n" +
            "<path d=\"M98.6489 23.5714C98.6489 23.5714 96.9019 24.8571 95.1549 26.1428V14.1428H90.4961V16.2857H93.1167V27.8571C92.3887 28.4285 91.8064 28.5714 91.8064 28.5714L93.1167 30.1428L98.7945 26L98.6489 23.5714C99.0857 23.5714 98.9401 23.4285 98.6489 23.5714Z\" fill=\"#253554\"/>\n" +
            "<path d=\"M93.4078 12.2858H95.446C95.7372 12.2858 95.7372 12.1429 95.7372 12.1429L92.8255 7.71436H90.6417L90.4961 7.85721C90.6417 8.00007 93.4078 12.2858 93.4078 12.2858Z\" fill=\"#253554\"/>\n" +
            "<path d=\"M133.008 8.71436H116.702V10.8572H133.008V8.71436Z\" fill=\"#253554\"/>\n" +
            "<path d=\"M122.671 18.5714H135.483V16.4286H114.373V18.5714H120.197C118.886 21.7143 116.12 29.4286 115.975 29.5714C115.975 29.7143 115.974 29.7143 116.12 29.7143H134.318C134.464 29.7143 134.464 29.5714 134.464 29.5714L131.843 22.5714H129.66C129.514 22.5714 129.514 22.7143 129.514 22.7143C129.514 22.8572 131.407 27.7143 131.407 27.7143H119.469L122.671 18.5714Z\" fill=\"#253554\"/>\n" +
            "<path d=\"M54.768 26.8571C54.1966 27.4286 53.0537 28.2857 51.0537 28.2857C50.1966 28.2857 49.1966 28.2857 48.768 28.2857C48.1966 28.2857 43.9109 28.2857 38.768 28.2857C42.4823 24.7143 45.6251 21.7143 45.9109 21.4286C46.1966 21.1429 46.9109 20.4286 47.6251 19.8571C49.0537 18.5714 50.1966 18.4286 51.1966 18.4286C52.6251 18.4286 53.768 19 54.768 19.8571C56.768 21.7143 56.768 25 54.768 26.8571ZM57.1966 17.5714C55.768 16 53.6251 15 51.3394 15C49.3394 15 47.6251 15.7143 46.0537 16.8571C45.4823 17.4286 44.6251 18 43.9109 18.8571C43.3394 19.4286 31.0537 31.4286 31.0537 31.4286C31.768 31.5714 32.6251 31.5714 33.3394 31.5714C34.0537 31.5714 48.3394 31.5714 48.9109 31.5714C50.0537 31.5714 50.9109 31.5714 51.768 31.4286C53.6251 31.2857 55.4823 30.5714 57.0537 29.1429C60.3394 26 60.3394 20.7143 57.1966 17.5714Z\" fill=\"#00A3FF\"/>\n" +
            "<path d=\"M37.1967 16.7143C35.6253 15.5714 34.0539 15 32.1967 15C29.911 15 27.7682 16 26.3396 17.5714C23.1967 20.8571 23.1967 26 26.4824 29.2857C27.911 30.5714 29.3396 31.2857 31.0539 31.4286L34.3396 28.2857C33.7682 28.2857 33.0539 28.2857 32.4824 28.2857C30.6253 28.1429 29.4824 27.5714 28.7682 26.8571C26.7682 24.8571 26.7682 21.7143 28.6253 19.7143C29.6253 18.7143 30.7682 18.2857 32.1967 18.2857C33.0539 18.2857 34.3396 18.4286 35.6253 19.7143C36.1967 20.2857 37.7682 21.4286 38.3396 22H38.4824L40.6253 19.8571V19.7143C39.6253 18.7143 38.0539 17.4286 37.1967 16.7143Z\" fill=\"#00C8DC\"/>\n" +
            "<path d=\"M52.1968 13.1429C50.6254 8.85718 46.4826 5.85718 41.7683 5.85718C36.1968 5.85718 31.7683 10 30.9111 15.1429C31.3397 15.1429 31.7683 15 32.3397 15C32.9111 15 33.6254 15.1429 34.1968 15.1429C34.9111 11.5715 38.054 9.00004 41.7683 9.00004C44.9111 9.00004 47.6254 10.8572 48.9111 13.5715C48.9111 13.5715 49.054 13.7143 49.054 13.5715C50.054 13.4286 51.1968 13.1429 52.1968 13.1429C52.1968 13.2857 52.1968 13.2857 52.1968 13.1429Z\" fill=\"#006EFF\"/>\n" +
            "</svg>\n";

    private static final String iconSvg = "<svg t=\"1688522444971\" class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"13923\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"100%\" height=\"100%\"><path d=\"M753.066667 516.266667c-12.8-17.066667-27.733333-23.466667-51.2-29.866667-6.4-2.133333-27.733333-2.133333-32-2.133333 0 0-6.4 2.133333-10.666667 4.266666-6.4 2.133333-10.666667 4.266667-17.066667 6.4-8.533333 4.266667-25.6 17.066667-27.733333 19.2-2.133333 2.133333-4.266667 6.4-8.533333 8.533334-8.533333 6.4-59.733333 57.6-74.666667 70.4l-38.4 38.4c-17.066667 17.066667-29.866667 29.866667-29.866667 32 0 2.133333 194.133333 2.133333 217.6 0 8.533333 0 17.066667-2.133333 25.6-2.133334 17.066667-4.266667 34.133333-14.933333 46.933334-32 6.4-8.533333 10.666667-17.066667 14.933333-29.866666 2.133333-8.533333 4.266667-12.8 2.133333-27.733334 2.133333-23.466667-4.266667-38.4-17.066666-55.466666zM832 106.666667H192C145.066667 106.666667 106.666667 145.066667 106.666667 192v640c0 46.933333 38.4 85.333333 85.333333 85.333333h640c46.933333 0 85.333333-38.4 85.333333-85.333333V192c0-46.933333-38.4-85.333333-85.333333-85.333333z m-53.333333 580.266666c-10.666667 8.533333-23.466667 17.066667-29.866667 19.2-2.133333 0-4.266667 2.133333-6.4 2.133334-2.133333 2.133333-23.466667 6.4-36.266667 10.666666-10.666667 2.133333-27.733333 2.133333-194.133333 2.133334-198.4 0-189.866667 0-215.466667-6.4-21.333333-6.4-42.666667-19.2-59.733333-36.266667-29.866667-27.733333-42.666667-64-42.666667-104.533333 0-14.933333 2.133333-29.866667 6.4-44.8 6.4-17.066667 8.533333-23.466667 27.733334-49.066667 4.266667-4.266667 23.466667-21.333333 29.866666-27.733333 10.666667-6.4 44.8-21.333333 51.2-21.333334 4.266667 0 6.4-4.266667 8.533334-10.666666 6.4-21.333333 8.533333-25.6 12.8-40.533334 10.666667-25.6 29.866667-51.2 53.333333-70.4 4.266667-4.266667 8.533333-6.4 12.8-10.666666 2.133333-2.133333 4.266667-2.133333 6.4-4.266667 17.066667-12.8 53.333333-27.733333 78.933333-29.866667 27.733333-4.266667 59.733333-2.133333 81.066667 6.4 17.066667 4.266667 21.333333 6.4 23.466667 8.533334 4.266667 2.133333 10.666667 4.266667 14.933333 6.4 19.2 8.533333 42.666667 27.733333 55.466667 42.666666 10.666667 12.8 23.466667 27.733333 25.6 34.133334 0 2.133333 2.133333 4.266667 4.266666 6.4 2.133333 2.133333 4.266667 6.4 4.266667 10.666666 0 2.133333 2.133333 6.4 4.266667 10.666667 4.266667 8.533333 4.266667 8.533333-19.2 10.666667-10.666667 0-23.466667 2.133333-27.733334 2.133333-2.133333 0-6.4 2.133333-8.533333 2.133333 0 0-4.266667-4.266667-6.4-10.666666-6.4-12.8-19.2-25.6-29.866667-36.266667-17.066667-14.933333-34.133333-23.466667-59.733333-29.866667-12.8-8.533333-17.066667-8.533333-32-8.533333-12.8 0-21.333333 0-27.733333 2.133333-4.266667 2.133333-10.666667 2.133333-12.8 4.266667-17.066667 4.266667-38.4 17.066667-53.333334 29.866667-14.933333 14.933333-25.6 27.733333-32 42.666666-4.266667 6.4-12.8 29.866667-10.666666 32 0 0 6.4 4.266667 12.8 6.4 14.933333 4.266667 27.733333 12.8 40.533333 21.333334 12.8 8.533333 34.133333 27.733333 36.266667 29.866666 4.266667 4.266667 10.666667 8.533333 14.933333 12.8 6.4 6.4 12.8 10.666667 12.8 12.8 0 0-6.4 8.533333-14.933333 17.066667-19.2 17.066667-23.466667 21.333333-25.6 21.333333 0 0-4.266667-4.266667-10.666667-6.4-4.266667-4.266667-10.666667-10.666667-14.933333-12.8-4.266667-2.133333-10.666667-8.533333-14.933334-12.8-23.466667-21.333333-49.066667-34.133333-72.533333-34.133333-19.2 0-44.8 8.533333-57.6 21.333333-12.8 10.666667-25.6 29.866667-29.866667 46.933334-2.133333 10.666667-2.133333 34.133333 0 44.8 8.533333 34.133333 36.266667 57.6 70.4 64 10.666667 2.133333 21.333333 2.133333 32 2.133333h21.333334l10.666666-10.666667 23.466667-23.466666c40.533333-38.4 81.066667-76.8 119.466667-115.2 19.2-19.2 51.2-49.066667 68.266666-61.866667 8.533333-6.4 23.466667-14.933333 32-17.066667 4.266667-2.133333 8.533333-4.266667 12.8-4.266666 10.666667-4.266667 25.6-6.4 49.066667-4.266667 8.533333 0 14.933333 0 23.466667 2.133333 6.4 2.133333 29.866667 10.666667 32 10.666667 2.133333 2.133333 4.266667 2.133333 6.4 2.133333 6.4 2.133333 14.933333 8.533333 27.733333 19.2 12.8 10.666667 19.2 17.066667 23.466667 25.6 2.133333 2.133333 4.266667 6.4 6.4 8.533334 2.133333 2.133333 12.8 23.466667 12.8 25.6 0 2.133333 0 4.266667 2.133333 6.4 4.266667 6.4 8.533333 36.266667 8.533333 46.933333-2.133333 40.533333-23.466667 83.2-55.466666 110.933333z\" fill=\"#139df6\" p-id=\"13924\"></path></svg>";

    private final static CloudAccountMeta meta = new CloudAccountMeta(TencentCredential.class, "fit2cloud_tencent_platform",
            "腾讯云", true, logoSvg, iconSvg, Map.of());

    private static final Info info = new Info("management-center", List.of(), Map.of());

    @Override
    public F2CBalance getAccountBalance(String req) {
        return TencentBaseCloudApi.getAccountBalance(JsonUtil.parseObject(req, GetAccountBalanceRequest.class));
    }

    @Override
    public CloudAccountMeta getCloudAccountMeta() {
        return meta;
    }

    @Override
    public Info getInfo() {
        return info;
    }

    public List<Credential.Region> getRegions(String req) {
        return TencentBaseMethodApi.getRegions(JsonUtil.parseObject(req, GetRegionsRequest.class));
    }
}
